zynqmp: pm: Implemented new pm API to load secure images
authorSiva Durga Prasad Paladugu <[email protected]>
Mon, 30 Apr 2018 10:19:27 +0000 (15:49 +0530)
committerSiva Durga Prasad Paladugu <[email protected]>
Thu, 17 May 2018 09:42:14 +0000 (15:12 +0530)
This patch adds pm_secure_rsaaes() API to provide access to
the xilsecure library for loading secure images

Signed-off-by: Siva Durga Prasad Paladugu <[email protected]>
plat/xilinx/zynqmp/pm_service/pm_api_sys.c
plat/xilinx/zynqmp/pm_service/pm_api_sys.h
plat/xilinx/zynqmp/pm_service/pm_svc_main.c

index 9f137f4bf59a071d8b101bb10e5c33e0f673e3dc..e84c4547e2fbe0edfb854e9958bbe50340cf6e1b 100644 (file)
@@ -538,6 +538,33 @@ enum pm_ret_status pm_get_chipid(uint32_t *value)
        return pm_ipi_send_sync(primary_proc, payload, value, 2);
 }
 
+/**
+ * pm_secure_rsaaes() - Load the secure images.
+ *
+ * This function provides access to the xilsecure library to load
+ * the authenticated, encrypted, and authenicated/encrypted images.
+ *
+ * address_low: lower 32-bit Linear memory space address
+ *
+ * address_high: higher 32-bit Linear memory space address
+ *
+ * size:       Number of 32bit words
+ *
+ * @return      Returns status, either success or error+reason
+ */
+enum pm_ret_status pm_secure_rsaaes(uint32_t address_low,
+                               uint32_t address_high,
+                               uint32_t size,
+                               uint32_t flags)
+{
+       uint32_t payload[PAYLOAD_ARG_CNT];
+
+       /* Send request to the PMU */
+       PM_PACK_PAYLOAD5(payload, PM_SECURE_RSA_AES, address_high, address_low,
+                        size, flags);
+       return pm_ipi_send_sync(primary_proc, payload, NULL, 0);
+}
+
 /**
  * pm_get_callbackdata() - Read from IPI response buffer
  * @data - array of PAYLOAD_ARG_CNT elements
index 8726eb767511e5a606ef07c18a820a65b9dfe462..bdb0eac52606cd5cfd0d34db5ab34a03194ac933 100644 (file)
@@ -108,6 +108,10 @@ enum pm_ret_status pm_fpga_load(uint32_t address_low,
 enum pm_ret_status pm_fpga_get_status(unsigned int *value);
 
 enum pm_ret_status pm_get_chipid(uint32_t *value);
+enum pm_ret_status pm_secure_rsaaes(uint32_t address_high,
+                                   uint32_t address_low,
+                                   uint32_t size,
+                                   uint32_t flags);
 void pm_get_callbackdata(uint32_t *data, size_t count);
 enum pm_ret_status pm_pinctrl_request(unsigned int pin);
 enum pm_ret_status pm_pinctrl_release(unsigned int pin);
index 69e711aa24f1304bdbf0760d538c37dcb471011c..02d2f2d2f03f14350627bfac4d4a07ac2d17c187 100644 (file)
@@ -252,6 +252,11 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
                         result[1]);
        }
 
+       case PM_SECURE_RSA_AES:
+               ret = pm_secure_rsaaes(pm_arg[0], pm_arg[1], pm_arg[2],
+                                      pm_arg[3]);
+               SMC_RET1(handle, (uint64_t)ret);
+
        case PM_GET_CALLBACK_DATA:
        {
                uint32_t result[4];